/**
 * 泛型工具
 *  ● Pick       从已知类型中选取部分字段组成新类型
 *  ● Omit       从已知类型中排除部分字段组成新类型
 *  ● Partial    把所有成员变成可选成员，生成新的类型
 *  ● Required   把所有成员变成必选成员，生成新的类型
 */
type Person = {
  name: string
  age: number
  gender: '男' | '女'
}

// Pick       从已知类型中选取部分字段组成新类型 >>>
type Person2 = Pick<Person, 'name' | 'age'>
const person2: Person2 = {
  name: '张智琦',
  age: 18
}
// Pick       从已知类型中选取部分字段组成新类型 <<<

// Omit       从已知类型中排除部分字段组成新类型 >>>
type Person3 = Omit<Person, 'name' | 'age'>
const person3: Person3 = {
  gender: '男'
}
// Omit       从已知类型中排除部分字段组成新类型 <<<

// Partial    把所有成员变成可选成员，生成新的类型 >>>
type Person4 = Partial<Person>
const person4: Person4 = {}
// Partial    把所有成员变成可选成员，生成新的类型 <<<

// Required   把所有成员变成必选成员，生成新的类型 >>>
type Person5 = Required<Person4>
const person5: Person5 = {
  name: '张智琦',
  age: 18,
  gender: '男'
}
// Required   把所有成员变成必选成员，生成新的类型 <<<

export {}
